home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / debian_package.inc < prev    next >
Text File  |  2005-03-31  |  2KB  |  68 lines

  1. # -*- Fundamental -*-
  2. # (C) 2004 Michel Arboi <mikhail@nessus.org>
  3.  
  4.  
  5. # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
  6. # [epoch:]upstream_version[-debian_revision]
  7.  
  8. include('global_settings.inc');
  9.  
  10. function deb_str_cmp(s1, s2)
  11. {
  12.  local_var    v1, v2;
  13.  
  14.  while (s1 || s2)
  15.  {
  16.   v1 = eregmatch(string: s1, pattern: "^([^0-9]*)([0-9]*)(.*)$");
  17.   v2 = eregmatch(string: s2, pattern: "^([^0-9]*)([0-9]*)(.*)$");
  18.   if (v1[1] < v2[1])
  19.    return -1;
  20.   else if (v1[1] > v2[1])
  21.    return 1;
  22.   if (v1[2] != v2[2]) return int(v1[2]) - int(v2[2]);
  23.   s1 = v1[3]; s2 = v2[3];
  24.  }
  25.  return 0;
  26. }
  27.  
  28. function deb_ver_cmp(ver1, ver2)
  29. {
  30.  local_var    v1, v2, e1, e2, uv1, uv2, dr1, dr2, x;
  31.  
  32.  v1 = eregmatch(string: ver1, pattern: "^([0-9]+:)?(.+)(-([a-z0-9+.]+))?$", icase: 1);
  33.  v2 = eregmatch(string: ver2, pattern: "^([0-9]+:)?(.+)(-([a-z0-9+.]+))?$", icase: 1);
  34.  if (isnull(v1) || isnull(v2)) return;
  35.  e1 = int(v1[1]); uv1 = v1[2]; dr1 = v1[4];
  36.  e2 = int(v2[1]); uv2 = v2[2]; dr2 = v2[4];
  37.  
  38.  if (e1 != e2) return e1 - e2;
  39.  x = deb_str_cmp(s1: uv1, s2: uv2);
  40.  if (x) return x;
  41.  x = deb_str_cmp(s1: dr1, s2: dr2);
  42.  return x; 
  43. }
  44.  
  45.  
  46. function deb_check(prefix, release, reference)
  47. {
  48.  global_var debver, dpkg_l;
  49.  local_var installed, ver, v;
  50.  
  51.  if (!debver) debver = chomp(get_kb_item("Host/Debian/release"));
  52.  if (debver && release != debver) return 0;
  53.  
  54.  if (!dpkg_l) dpkg_l = get_kb_item("Host/Debian/dpkg-l");
  55.  installed = egrep(string: dpkg_l, pattern: '^ii +' + prefix + ' +');
  56.  if (! installed) return 0;
  57.  ver = ereg_replace(    string: installed, replace: "\1",
  58.             pattern: '^ii +' + prefix + ' +([^ ]+) +.*$');
  59.  if (ver == installed) return 0;    # cannot extract version
  60.  if (deb_ver_cmp(ver1: ver, ver2: reference) < 0)
  61.  {
  62.    debug_print("debian_package[", get_host_ip(), "]: package ", prefix, "_", ver, " is vulnerable in Debian ", release, ". Upgrade to ", prefix, "_", reference, "\n");
  63.    return 1;
  64.  }
  65.  return 0;
  66. }
  67.  
  68.